/* vi:set ts=8 sts=4 sw=4 noet:
 *
 * VIM - Vi IMproved	by Bram Moolenaar
 *
 * Do ":help uganda"  in Vim to read copying and usage conditions.
 * Do ":help credits" in Vim to see a list of people who contributed.
 */

/*
 * This file contains the defines for the machine dependent escape sequences
 * that the editor needs to perform various operations. All of the sequences
 * here are optional, except "cm" (cursor motion).
 */

#if defined(SASC) && SASC < 658
/*
 * The SAS C compiler has a bug that makes typedefs being forgot in include
 * files.  Has been fixed in version 6.58.
 */
typedef unsigned char char_u;
#endif

/*
 * Index of the termcap codes in the term_strings array.
 */
enum SpecialKey
{
  KS_NAME = 0, /* name of this terminal entry */
  KS_CE,       /* clear to end of line */
  KS_AL,       /* add new blank line */
  KS_CAL,      /* add number of blank lines */
  KS_DL,       /* delete line */
  KS_CDL,      /* delete number of lines */
  KS_CS,       /* scroll region */
  KS_CL,       /* clear screen */
  KS_CD,       /* clear to end of display */
  KS_UT,       /* clearing uses current background color */
  KS_DA,       /* text may be scrolled down from up */
  KS_DB,       /* text may be scrolled up from down */
  KS_VI,       /* cursor invisible */
  KS_VE,       /* cursor visible */
  KS_VS,       /* cursor very visible (blink) */
  KS_CVS,      /* cursor normally visible (no blink) */
  KS_CSH,      /* cursor shape */
  KS_CRC,      /* request cursor blinking */
  KS_CRS,      /* request cursor style */
  KS_ME,       /* normal mode */
  KS_MR,       /* reverse mode */
  KS_MD,       /* bold mode */
  KS_SE,       /* normal mode */
  KS_SO,       /* standout mode */
  KS_CZH,      /* italic mode start */
  KS_CZR,      /* italic mode end */
  KS_UE,       /* exit underscore (underline) mode */
  KS_US,       /* underscore (underline) mode */
  KS_UCE,      /* exit undercurl mode */
  KS_UCS,      /* undercurl mode */
  KS_STE,      /* exit strikethrough mode */
  KS_STS,      /* strikethrough mode */
  KS_MS,       /* save to move cur in reverse mode */
  KS_CM,       /* cursor motion */
  KS_SR,       /* scroll reverse (backward) */
  KS_CRI,      /* cursor number of chars right */
  KS_VB,       /* visual bell */
  KS_KS,       /* put term in "keypad transmit" mode */
  KS_KE,       /* out of "keypad transmit" mode */
  KS_TI,       /* put terminal in termcap mode */
  KS_TE,       /* out of termcap mode */
  KS_BC,       /* backspace character (cursor left) */
  KS_CCS,      /* cur is relative to scroll region */
  KS_CCO,      /* number of colors */
  KS_CSF,      /* set foreground color */
  KS_CSB,      /* set background color */
  KS_XS,       /* standout not erased by overwriting (hpterm) */
  KS_XN,       /* newline glitch */
  KS_MB,       /* blink mode */
  KS_CAF,      /* set foreground color (ANSI) */
  KS_CAB,      /* set background color (ANSI) */
  KS_LE,       /* cursor left (mostly backspace) */
  KS_ND,       /* cursor right */
  KS_CIS,      /* set icon text start */
  KS_CIE,      /* set icon text end */
  KS_CSC,      /* set cursor color start */
  KS_CEC,      /* set cursor color end */
  KS_TS,       /* set window title start (to status line)*/
  KS_FS,       /* set window title end (from status line) */
  KS_CWP,      /* set window position in pixels */
  KS_CGP,      /* get window position */
  KS_CWS,      /* set window size in characters */
  KS_CRV,      /* request version string */
  KS_RFG,      /* request foreground color */
  KS_RBG,      /* request background color */
  KS_CSI,      /* start insert mode (bar cursor) */
  KS_CEI,      /* end insert mode (block cursor) */
  KS_CSR,      /* start replace mode (underline cursor) */
  KS_CSV,      /* scroll region vertical */
  KS_OP,       /* original color pair */
  KS_U7,       /* request cursor position */
  KS_8F,       /* set foreground color (RGB) */
  KS_8B,       /* set background color (RGB) */
  KS_CBE,      /* enable bracketed paste mode */
  KS_CBD,      /* disable bracketed paste mode */
  KS_CPS,      /* start of bracketed paste */
  KS_CPE,      /* end of bracketed paste */
  KS_CST,      /* save window title */
  KS_CRT,      /* restore window title */
  KS_SSI,      /* save icon text */
  KS_SRI       /* restore icon text */
};

#define KS_LAST KS_SRI

/*
 * the terminal capabilities are stored in this array
 * IMPORTANT: When making changes, note the following:
 * - there should be an entry for each code in the builtin termcaps
 * - there should be an option for each code in option.c
 * - there should be code in term.c to obtain the value from the termcap
 */

extern char_u *(term_strings[]); /* current terminal strings */

/*
 * strings used for terminal
 */
#define T_NAME (TERM_STR(KS_NAME)) /* terminal name */
#define T_CE (TERM_STR(KS_CE))     /* clear to end of line */
#define T_AL (TERM_STR(KS_AL))     /* add new blank line */
#define T_CAL (TERM_STR(KS_CAL))   /* add number of blank lines */
#define T_DL (TERM_STR(KS_DL))     /* delete line */
#define T_CDL (TERM_STR(KS_CDL))   /* delete number of lines */
#define T_CS (TERM_STR(KS_CS))     /* scroll region */
#define T_CSV (TERM_STR(KS_CSV))   /* scroll region vertical */
#define T_CL (TERM_STR(KS_CL))     /* clear screen */
#define T_CD (TERM_STR(KS_CD))     /* clear to end of display */
#define T_UT (TERM_STR(KS_UT))     /* clearing uses background color */
#define T_DA (TERM_STR(KS_DA))     /* text may be scrolled down from up */
#define T_DB (TERM_STR(KS_DB))     /* text may be scrolled up from down */
#define T_VI (TERM_STR(KS_VI))     /* cursor invisible */
#define T_VE (TERM_STR(KS_VE))     /* cursor visible */
#define T_VS (TERM_STR(KS_VS))     /* cursor very visible (blink) */
#define T_CVS (TERM_STR(KS_CVS))   /* cursor normally visible (no blink) */
#define T_CSH (TERM_STR(KS_CSH))   /* cursor shape */
#define T_CRC (TERM_STR(KS_CRC))   /* request cursor blinking */
#define T_CRS (TERM_STR(KS_CRS))   /* request cursor style */
#define T_ME (TERM_STR(KS_ME))     /* normal mode */
#define T_MR (TERM_STR(KS_MR))     /* reverse mode */
#define T_MD (TERM_STR(KS_MD))     /* bold mode */
#define T_SE (TERM_STR(KS_SE))     /* normal mode */
#define T_SO (TERM_STR(KS_SO))     /* standout mode */
#define T_CZH (TERM_STR(KS_CZH))   /* italic mode start */
#define T_CZR (TERM_STR(KS_CZR))   /* italic mode end */
#define T_UE (TERM_STR(KS_UE))     /* exit underscore (underline) mode */
#define T_US (TERM_STR(KS_US))     /* underscore (underline) mode */
#define T_UCE (TERM_STR(KS_UCE))   /* exit undercurl mode */
#define T_UCS (TERM_STR(KS_UCS))   /* undercurl mode */
#define T_STE (TERM_STR(KS_STE))   /* exit strikethrough mode */
#define T_STS (TERM_STR(KS_STS))   /* strikethrough mode */
#define T_MS (TERM_STR(KS_MS))     /* save to move cur in reverse mode */
#define T_CM (TERM_STR(KS_CM))     /* cursor motion */
#define T_SR (TERM_STR(KS_SR))     /* scroll reverse (backward) */
#define T_CRI (TERM_STR(KS_CRI))   /* cursor number of chars right */
#define T_VB (TERM_STR(KS_VB))     /* visual bell */
#define T_KS (TERM_STR(KS_KS))     /* put term in "keypad transmit" mode */
#define T_KE (TERM_STR(KS_KE))     /* out of "keypad transmit" mode */
#define T_TI (TERM_STR(KS_TI))     /* put terminal in termcap mode */
#define T_TE (TERM_STR(KS_TE))     /* out of termcap mode */
#define T_BC (TERM_STR(KS_BC))     /* backspace character */
#define T_CCS (TERM_STR(KS_CCS))   /* cur is relative to scroll region */
#define T_CCO (TERM_STR(KS_CCO))   /* number of colors */
#define T_CSF (TERM_STR(KS_CSF))   /* set foreground color */
#define T_CSB (TERM_STR(KS_CSB))   /* set background color */
#define T_XS (TERM_STR(KS_XS))     /* standout not erased by overwriting */
#define T_XN (TERM_STR(KS_XN))     /* newline glitch */
#define T_MB (TERM_STR(KS_MB))     /* blink mode */
#define T_CAF (TERM_STR(KS_CAF))   /* set foreground color (ANSI) */
#define T_CAB (TERM_STR(KS_CAB))   /* set background color (ANSI) */
#define T_LE (TERM_STR(KS_LE))     /* cursor left */
#define T_ND (TERM_STR(KS_ND))     /* cursor right */
#define T_CIS (TERM_STR(KS_CIS))   /* set icon text start */
#define T_CIE (TERM_STR(KS_CIE))   /* set icon text end */
#define T_TS (TERM_STR(KS_TS))     /* set window title start */
#define T_FS (TERM_STR(KS_FS))     /* set window title end */
#define T_CSC (TERM_STR(KS_CSC))   /* set cursor color start */
#define T_CEC (TERM_STR(KS_CEC))   /* set cursor color end */
#define T_CWP (TERM_STR(KS_CWP))   /* set window position */
#define T_CGP (TERM_STR(KS_CGP))   /* get window position */
#define T_CWS (TERM_STR(KS_CWS))   /* window size */
#define T_CSI (TERM_STR(KS_CSI))   /* start insert mode */
#define T_CEI (TERM_STR(KS_CEI))   /* end insert mode */
#define T_CSR (TERM_STR(KS_CSR))   /* start replace mode */
#define T_CRV (TERM_STR(KS_CRV))   /* request version string */
#define T_RFG (TERM_STR(KS_RFG))   /* request foreground RGB */
#define T_RBG (TERM_STR(KS_RBG))   /* request background RGB */
#define T_OP (TERM_STR(KS_OP))     /* original color pair */
#define T_U7 (TERM_STR(KS_U7))     /* request cursor position */
#define T_8F (TERM_STR(KS_8F))     /* set foreground color (RGB) */
#define T_8B (TERM_STR(KS_8B))     /* set background color (RGB) */
#define T_BE (TERM_STR(KS_CBE))    /* enable bracketed paste mode */
#define T_BD (TERM_STR(KS_CBD))    /* disable bracketed paste mode */
#define T_PS (TERM_STR(KS_CPS))    /* start of bracketed paste */
#define T_PE (TERM_STR(KS_CPE))    /* end of bracketed paste */
#define T_CST (TERM_STR(KS_CST))   /* save window title */
#define T_CRT (TERM_STR(KS_CRT))   /* restore window title */
#define T_SSI (TERM_STR(KS_SSI))   /* save icon text */
#define T_SRI (TERM_STR(KS_SRI))   /* restore icon text */

#define TMODE_COOK 0  /* terminal mode for external cmds and Ex mode */
#define TMODE_SLEEP 1 /* terminal mode for sleeping (cooked but no echo) */
#define TMODE_RAW 2   /* terminal mode for Normal and Insert mode */
